package com.ingenio.dao;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.ingenio.Adapter;
import com.ingenio.business.Almacen;
import com.ingenio.business.DetalleMovimiento;
import com.ingenio.business.Movimiento;
import com.ingenio.business.Producto;
import com.ingenio.business.TipoMovimiento;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;

public class DetalleMovimientoAdapter extends Adapter{
   
	public List<DetalleMovimiento> devolverDetalles(Integer idMovimiento) throws Exception{
		Connection conn = null;
    	List<DetalleMovimiento> detallesMov = new ArrayList<DetalleMovimiento>();
    	PreparedStatement stmt = null;
		try {
			conn = (Connection) abrirConexion();
    		String sel ="SELECT * from detallemovimiento WHERE IdMovimiento = ?";
    		stmt = (PreparedStatement) conn.prepareStatement(sel);
    		stmt.setInt(1, idMovimiento);
    		ResultSet result = stmt.executeQuery();
    		DetalleMovimiento dm = null;
    		
    		Producto pr = null;
    		ProductoAdapter pa = new ProductoAdapter();
    		Almacen a = null;
    		AlmacenAdapter aa = new AlmacenAdapter();
    		
    		while(result.next()){
    			String IdProducto = result.getString("IdProducto");
    			Double cantidadMov = result.getDouble("cantidadMovimiento");
    			Integer IdAlmacen = result.getInt("IdAlmacen");
    			
    			a = aa.devolverAlmacen(IdAlmacen);
    			pr = pa.devolverProducto(IdProducto);
    			
    			dm = new DetalleMovimiento(new Movimiento(), pr, a, cantidadMov);
    			detallesMov.add(dm);
    		}
		}
		catch (Exception e) {
			e.printStackTrace();
			throw new Exception("Error al conectar con la base de datos.", e);
		}
    	finally{
    		cerrarConexion(conn);
    	}
    	return detallesMov;
	}
	
	public boolean guardarDetalleMovimiento(Movimiento m, Integer idMovimiento, Almacen almacen, 
			TipoMovimiento tipoMovimiento, Connection conn) throws Exception{
		InventarioAdapter ia = new InventarioAdapter();
		try{
			String add_detalle = "INSERT INTO detallemovimiento(IdMovimiento,IdProducto,cantidadMovimiento,IdAlmacen) " +
					"VALUES (?,?,?,?)";
			PreparedStatement stmtInsert = (PreparedStatement) conn.prepareStatement(add_detalle);
			boolean ingresaDetalle;
			for (DetalleMovimiento detalleMovimiento : m.getDetallesMov()){
				if(m.getConceptoMov().getIdConcepto() == 1){ //Si el concepto es 1, no actualizo inventario ya que la mercaderia pasa a control de calidad
					ingresaDetalle = true;
				}else{
					ingresaDetalle = ia.actualizarInventario(detalleMovimiento.getProducto(), almacen, tipoMovimiento, detalleMovimiento.getCantidadMov(), conn);
				}
				if (ingresaDetalle){
					stmtInsert.setInt(1, idMovimiento);
					stmtInsert.setString(2, detalleMovimiento.getProducto().getIdProducto());
					stmtInsert.setDouble(3, detalleMovimiento.getCantidadMov());
					stmtInsert.setInt(4, detalleMovimiento.getAlmacen().getIdAlmacen());
					stmtInsert.addBatch();
				}else{
					return false;
				}
			}
			stmtInsert.executeBatch();
		}catch(Exception e){
			e.printStackTrace();
			return false;
		}
		return true;
	}
		
}
